﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using DataAccessLayer;
using DTO;
using System.Configuration;


namespace DAL
{
    public class LoiBinhLuanDAL
    {
        private DBManager _dbmanager;

        #region Phương thức khởi tạo mặc định
        /// <summary>
        /// Phương thức khởi tạo mặc định
        /// </summary>
        public LoiBinhLuanDAL()
        {
            string ConnectionInfo = ConfigurationManager.AppSettings["ConnectionInfo"];
            _dbmanager = new DBManager(DataProvider.SqlServer, ConnectionInfo);
        }
        #endregion

        #region Phương thức tạo 1 lời bình luận từ Data Reader - Dùng để hiển thị gridview
        /// <summary>
        /// Phương thức tạo 1 lời bình luận từ Data Reader - Dùng để hiển thị gridview
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private LoiBinhLuanDTO CreateLoiBinhLuan_SanPham_KhachHang_FromReader(IDataReader reader)
        {
            LoiBinhLuanDTO _lblDTO = new LoiBinhLuanDTO();
            //_lblDTO.MaLoiBinhLuan = Convert.ToInt32(reader["MaLoiBinhLuan"]);
            //_lblDTO.SanPham.TenSanPham = reader["TenSanPham"].ToString();
            //_lblDTO.KhachHang.TenKhachHang = reader["TenKhachHang"].ToString();
            //_lblDTO.NgayBinhLuan = Convert.ToDateTime(reader["NgayBinhLuan"]);
            //_lblDTO.NoiDung = reader["NoiDung"].ToString();
            //_lblDTO.NhanVien.TenNhanVien = _lblDTO.KhachHang.TenKhachHang == null ? reader["TenNhanVien"].ToString() : null;
            return _lblDTO;
        }

        #endregion

        #region Phương thức tạo 1 lời bình luận từ Data Reader
        /// <summary>
        /// Phương thức tạo 1 lời bình luận từ Data Reader
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private LoiBinhLuanDTO CreateLoiBinhLuanFromReader(IDataReader reader)
        {
            LoiBinhLuanDTO _lblDTO = new LoiBinhLuanDTO();
            _lblDTO.MaLoiBinhLuan = Convert.ToInt32(reader["MaLoiBinhLuan"]);
            _lblDTO.MaSanPham = reader["MaSanPham"].ToString();
            _lblDTO.MaKhachHang = reader["MaKhachHang"].ToString();
            _lblDTO.NgayBinhLuan = Convert.ToDateTime(reader["NgayBinhLuan"]);
            _lblDTO.NoiDung = reader["NoiDung"].ToString();
            _lblDTO.MaNhanVien = reader["MaNhanVien"].ToString();
            
            return _lblDTO;
        }
        #endregion

        #region Phương thức lấy danh sách lời bình luận
        /// <summary>
        /// Phương thức lấy danh sách lời bình luận
        /// </summary>
        /// <returns></returns>
        public List<LoiBinhLuanDTO> GetListLoiBinhLuan()
        {
            List<LoiBinhLuanDTO> _lst = new List<LoiBinhLuanDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListLoiBinhLuan");
                while (_reader.Read())
                    _lst.Add(this.CreateLoiBinhLuanFromReader(_reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lst;
            
        }
        #endregion

        #region Phương thức lấy thông tin 1 lời bình luận dựa vào mã lời bình luận
        /// <summary>
        /// Phương thức lấy thông tin 1 lời bình luận dựa vào mã lời bình luận
        /// </summary>
        /// <param name="malbl"></param>
        /// <returns></returns>
        public LoiBinhLuanDTO GetLoiBinhLuan(string malbl)
        {
            
            LoiBinhLuanDTO _lblDTO = new LoiBinhLuanDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_lbl", malbl);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getLoiBinhLuan");
                while (_reader.Read())
                    _lblDTO = this.CreateLoiBinhLuanFromReader(_reader);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lblDTO;
            
        }
        #endregion

        #region Phương thức thêm 1 lời bình luận
        /// <summary>
        /// Phương thức thêm 1 lời bình luận
        /// </summary>
        /// <param name="lbl"></param>
        /// <returns></returns>
        public int Them(LoiBinhLuanDTO lbl)
        {
            
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(5);         
                _dbmanager.AddParameters(0, "@ma_sp", lbl.MaSanPham);
                _dbmanager.AddParameters(1, "@ma_kh", lbl.MaKhachHang);
                _dbmanager.AddParameters(2, "@ngay_bl", lbl.NgayBinhLuan);
                _dbmanager.AddParameters(3, "@noidung", lbl.NoiDung);
                _dbmanager.AddParameters(4, "@ma_nv", lbl.MaNhanVien);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemLoiBinhLuan");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
            
        }
        #endregion

        #region Phương thức sửa thông tin 1 lời bình luận
        /// <summary>
        /// Phương thức sửa thông tin 1 lời bình luận
        /// </summary>
        /// <param name="lbl"></param>
        /// <returns></returns>
        public int Sua(LoiBinhLuanDTO lbl)
        {
            
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(5);
                _dbmanager.AddParameters(0, "@ma_sp", lbl.MaSanPham);
                _dbmanager.AddParameters(1, "@ma_kh", lbl.MaKhachHang);
                _dbmanager.AddParameters(2, "@ngay_bl", lbl.NgayBinhLuan);
                _dbmanager.AddParameters(3, "@noidung", lbl.NoiDung);
                _dbmanager.AddParameters(4, "@ma_nv", lbl.MaNhanVien);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_CapNhatLoiBinhLuan");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
            
        }

        #endregion

        #region Phương thức xóa 1 lời bình luận
        /// <summary>
        /// Phương thức xóa 1 lời bình luận
        /// </summary>
        /// <param name="lbl"></param>
        /// <returns></returns>
        public int Xoa(LoiBinhLuanDTO lbl)
        {
            
           

            int _index = -1;
            try
            { 
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_lbl", lbl.MaLoiBinhLuan);
                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_XoaLoiBinhLuan");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
            
        }
        #endregion

        #region Get list loi binh luan cho 1 san pham        
        public List<LoiBinhLuanDTO> GetListLoiBinhLuanMotSanPham(string masp)
        {
            List<LoiBinhLuanDTO> _lst = new List<LoiBinhLuanDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_sp", masp);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListLoiBinhLuanMotSanPham");
                while (_reader.Read())
                    _lst.Add(this.CreateLoiBinhLuan_SanPham_KhachHang_FromReader(_reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lst;
        }
        #endregion
    }
}